
import { reqCartList,reqDeleteCartById,reqUpdataCheckedById } from "@/api"
const actions={
    /* 获取购物车列表的数据 */
    async getCartList({commit}){
        let result=await reqCartList();
        if(result.code==200){
            commit('GETCARTLIST',result.data)
        }
    },
    /* 删除购物车某一个产品 */
    async deleteCartListBySkuId({commit},skuId){
        let result=await reqDeleteCartById(skuId);
        if(result.code==200){
            return 'ok'
        }else{
            return Promise.reject(new Error('faile'))
        }
    },
    /* 修改购物车某一个产品的选中状态 */
   async updateCheckedById({commit},{skuId,isChecked}){
        let result =await reqUpdataCheckedById(skuId,isChecked)
        if(result.code==200){
            return 'ok'
        }else{
            return Promise.reject(new Error('faile'))
        }
    },
    /* 删除全部勾选的产品 */
    deleteAllCheckedCart({dispatch,getters}){
        /* context小仓库中由disppatch  可以派发active请求  那么可以重复调用actions内的请求  而state可以拿到ischecked可以判断是否选中 */
        /* 获取购物车中全部的产品 是一个数组  遍历 判断  派发请求 返回的结果是一个个的promise 所以可以使用一个数组储存起来 
            后续使用promise.all方法来判断是否全部成功 全部成功返回成功结果 只要有一个失败则返回失败的结果 */
         let promiseAll=[]
       getters.cartList.cartInfoList.forEach(item=>{
            let promise=item.isChecked==1?dispatch('deleteCartListBySkuId',item.skuId):''
            promiseAll.push(promise)
        })
        /* 返回结果如果都成功返回成功的结果 但凡有一个失败则全部失败 */
        return Promise.all(promiseAll)
    },
    /* 修改全部产品的勾选状态 */
    updateAllCartChecked({state,dispatch},isChecked){
        let promiseAll=[]
        state.cartList[0].cartInfoList.forEach(item=>{
           let promise= dispatch('updateCheckedById',{
            skuId:item.skuId,
            isChecked
        })
           promiseAll.push(promise)
        })
        return Promise.all(promiseAll)
    }
    
}


const mutations={
    GETCARTLIST(state,cartList){
        state.cartList = cartList||[]
    }
}

const getters={
    cartList(state){
       return state.cartList[0]||{}
    },
}

const state={
    cartList:[]
}

export default{
    actions,
    mutations,
    getters,
    state
}